package com.huazi.www.drug.drugz.servlet;


import com.alibaba.fastjson.JSON;
import com.huazi.www.drug.drugz.enity.DrugStock;
import com.huazi.www.drug.drugz.enity.Medicate;
import com.huazi.www.drug.drugz.service.DrugService;
import com.huazi.www.drug.drugz.service.impl.DrugServiceImpl;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;

/**
 * @description：添加申请
 * @author：zt
 * @date：2021/5/8 11:38
 * @versions：v1.0
 */
public class DrugServlet extends HttpServlet {

    //业务逻辑层对象
    DrugService drugService = new DrugServiceImpl();

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doPost(req, resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        req.setCharacterEncoding("UTF-8");   //设置请求字符集编码

        resp.setCharacterEncoding("UTF-8");  //设置响应字符集编码

        PrintWriter wr = resp.getWriter();   //输出流

        String opr = req.getParameter("opr");     //操作码

        if (opr == null || opr.equals("")) {         //操作码非空判断
            opr = "";
        }

        if (opr.equals("repertory")) {              //库存申请

            String name = req.getParameter("name");      //申请人
            String date = req.getParameter("date");      //申请时间

            Date date1 = null;     //日期对象
            //日期格式转换 ("yyyy年MM月dd日 HH时mm分ss秒")
            SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy年MM月dd日 HH时mm分ss秒");
            try {
                date1 = dateFormat.parse(date);     //将字符串转换成时间 parse
            } catch (ParseException e) {
                e.printStackTrace();
            }

            String drugs = req.getParameter("list");    //药品集合 json集合

            List<DrugStock> list = JSON.parseArray(drugs, DrugStock.class);     //将json对象数组转换成java集合对象 parseArray


            int count = drugService.drugStork(list, date1);       //添加多个库存 drugStork

            String type = req.getParameter("type");        //类型 【补充库存】
            String status = req.getParameter("status");    //申请状态 【0：未通过】
            String remark = req.getParameter("remark");    //备注

            if (remark == null || remark.equals("")) {        //备注的非空验证
                remark = "";
            }

            Medicate medicate = new Medicate(name, date1, count, type, Integer.parseInt(status), remark);     //申请记录 name、date1、count、type、status(int)、remark
            boolean b = drugService.inStore(medicate);     //新增申请  inStore()

            wr.println(b);      //输出结果
        } else if (opr.equals("inDrug")) {         //新增药品

            String name = req.getParameter("name");      //申请人
            String date = req.getParameter("date");      //申请时间


            Date date1 = null;    //日期对象
            //日期格式转换 ("yyyy年MM月dd日 HH时mm分ss秒")
            SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy年MM月dd日 HH时mm分ss秒");
            try {
                date1 = dateFormat.parse(date);    //将字符串转换成时间 parse
            } catch (ParseException e) {
                e.printStackTrace();
            }

            String drug = req.getParameter("drug");            //药品名称
            String drugType = req.getParameter("drugType");    //药品类型
            String price = req.getParameter("price");          //药品价格
            String count = req.getParameter("count");          //数量
            String type = req.getParameter("type");            //类型 【新增药品】
            String status = req.getParameter("status");        //申请状态 【0：未通过】
            String remark = req.getParameter("remark");        //备注

            if (remark == null || remark.equals("")) {      //备注信息的空值处理
                remark = "";
            }

            //新增药品申请  name、date1、drug、drugType(int)、price(double)、count(int)、type、status(int)、remark
            Medicate medicate = new Medicate(name, date1, drug, Integer.parseInt(drugType), Double.parseDouble(price), Integer.parseInt(count), type, Integer.parseInt(status), remark);

            boolean b = drugService.addDrug(medicate);     //添加药品申请 addDrug

            wr.println(b);     //向页面输出内容

        } else if (opr.equals("drugManage")) {            //药品管理 【库存 | 新增】

            String id = req.getParameter("id");           //编号
            String name = req.getParameter("name");       //申请人
            String date = req.getParameter("dates");      //申请时间

            Date date1 = new Date(Long.parseLong(date));     //时间转换  时间构造方法 毫秒数转换

            String drugName = req.getParameter("drugName");  //药品名称
            String drugType = req.getParameter("drugType");  //药品类型
            String price = req.getParameter("price");        //药品价格
            String count = req.getParameter("count");        //药品数量
            String type = req.getParameter("types");        //申请类型
            String remark = req.getParameter("remark");      //备注

            //申请记录  id(int)、name、date1、0、drugName、drugType(int)、price(double)、count(int)、type、0、remark
            Medicate medicate = new Medicate(Integer.parseInt(id), name, date1, 0, drugName, Integer.parseInt(drugType), Double.parseDouble(price), Integer.parseInt(count), type, 0, remark);

            int store = drugService.store(medicate);     //通过申请记录对药品的处理  store

            wr.println(store);    //输出结果

        } else if (opr.equals("upDrug")) {    //更新药品价格

            String id = req.getParameter("id");    //药品编号
            String field = req.getParameter("field");   //字段名 【修改】
            String value = req.getParameter("value");   //内容 【修改】

            boolean b = drugService.updDrug(Integer.parseInt(id), field, value);    //根据药品编号更新字段 upDrug

            wr.println(b);    //输出结果
        } else if (opr.equals("upRemark")) {    //更新药品备注

            String id = req.getParameter("id");     //药品编号
            String value = req.getParameter("value");    //药品备注

            boolean b = drugService.updDrug(Integer.parseInt(id), "remark", value);  //根据药品编号更新字段 upDrug "remark"
            wr.println(b);   //输出内容
        }
        wr.flush();    //刷新缓冲区
        wr.close();    //关闭输出流
    }

}
